var express = require('express');
const router = express.Router();
//中间件
const resultResponeMiddleWare = require('../../MiddleWares/resultResponeMiddleWare');
const checkTokenMiddleWare = require('../../MiddleWares/checkTokenMiddleWare');
const ArticleCateModel = require('../../model/ArticleCateModel');



//获取文章分类列表
router.get('/cates', checkTokenMiddleWare, resultResponeMiddleWare, function (req, res, next) {
    ArticleCateModel.find({ is_delete: 0 }).select({ __v: 0 }).exec().then(data => {
        if (!data) return res.sendResponse(1, "查询分类失败")
        res.sendResponse(0, "ok", data)
    }).catch(err => {
        res.sendResponse(1, err)
    })
});

//添加文章分类
router.post('/addcates', checkTokenMiddleWare, resultResponeMiddleWare, (req, res, next) => {
    // console.log(req.body);
    let { name, alias } = req.body
    //验证不为空
    if (!name || !alias) return res.sendResponse(1, "请输入分类名与分类别名")
    //查询与提交的分类名或别名相同的项
    ArticleCateModel.find({ $or: [{ name: name }, { alias: alias }] }).then(data => {
        console.log(data);
        //如果分类名与别名被一项占用了或有一项被占用
        if (data.length === 1) {
            //被同一项占用
            if (data[0].name === name && data[0].alias === alias) {
                console.log(data[0]);
                return res.sendResponse(1, "分类名与别名都被占用")
            } else if (data[0].name === name && data[0].alias !== alias) {
                return res.sendResponse(1, "分类名被占用")
            } else if (data[0].alias === alias && data[0].name !== name) {
                return res.sendResponse(1, "别名被占用")
            }
        } else if (data.length === 2) {
            return res.sendResponse(1, "分类名与别名都被占用")
        } else {//没被占用
            ArticleCateModel.create({ ...req.body }).then(data => {
                console.log(data);
                if (!data) return res.sendResponse(1, "添加别名失败")
                res.sendResponse(0, "ok")
            }).catch(err => {
                res.sendResponse(1, err)
            })

        }
    }).catch(err => {
        res.sendResponse(1, err)
    })
})

//删除文章分类
//标记删除，根据分类id
router.get('/deletecate/:id', checkTokenMiddleWare, resultResponeMiddleWare, (req, res, next) => {
    // console.log(req.params.id);
    let id = req.params.id
    ArticleCateModel.findOneAndUpdate({ _id: id }, { is_delete: 1 }).then(data => {
        console.log(data);
        if (data) {
            return res.sendResponse(0, "删除成功")
        }
        return res.sendResponse(1, "类别不存在")
    }).catch(err => {
        res.sendResponse(1, err)
    })
})
//根据id获取文章分类
router.get('/cates/:id', checkTokenMiddleWare, resultResponeMiddleWare, (req, res, next) => {
    let id = req.params.id
    // console.log(id);
    ArticleCateModel.findById({ _id: id }).select({ __v: 0 }).then(data => {
        if (data) return res.sendResponse(0, "ok", data)
        return res.sendResponse(1, "分类不存在")
    }).catch(err => {
        return res.sendResponse(1, err)
    })
})

//根据id更新文章分类
router.post('/cates/updatecate', checkTokenMiddleWare, resultResponeMiddleWare, (req, res, next) => {
    let { _id, name, alias, is_delete } = req.body
    console.log(req.body);
    //验证不为空
    if (!name || !alias) return res.sendResponse(1, "请输入分类名与分类别名")
    //查询除此条数据外
    ArticleCateModel.find({ _id: { $ne: _id }, $or: [{ name }, { alias }] }).then(data => {
        //如果分类名与别名被一项占用了或有一项被占用
        if (data.length === 1) {
            //被同一项占用
            if (data[0].name === name && data[0].alias === alias) {
                // console.log(data[0]);
                return res.sendResponse(1, "分类名与别名都被占用")
            } else if (data[0].name === name && data[0].alias !== alias) {
                return res.sendResponse(1, "分类名被占用")
            } else if (data[0].alias === alias && data[0].name !== name) {
                return res.sendResponse(1, "别名被占用")
            }
        } else if (data.length === 2) {
            return res.sendResponse(1, "分类名与别名都被占用")
        } else {//没被占用
            ArticleCateModel.updateOne({ _id }, { name, alias, is_delete }).then(data => {
                console.log(data);
                if (!data) return res.sendResponse(1, "更新失败")
                res.sendResponse(0, "更新成功")
            }).catch(err => {
                res.sendResponse(1, err)
            })
        }
    })
    res.sendResponse(0)
})

module.exports = router;
